<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;
use think\Validate;
class Goods extends Base
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        // 接收keyword参数
        $keyword=input('keyword');
        $where=[];
        if(!empty($keyword)){
            $where['goods_name']=['like',"%$keyword%"];
        }
        $list=\app\admin\model\Goods::where($where)->order('id asc')->paginate(2,false,[
            'query'=>['keyword'=>$keyword],
        ]);
        //paginate第一个参数是每一页显示多少条，第二个参数写true或者false是用来显示是简略版分页还是完整版或者写一共显示多少条第三个参数url的额外参数
        $this->assign('list',$list);
        return view();
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
        return view();
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        // 接收参数
       $params=$request->param();
       sleep(2);//模拟 方便重复点击测试
    //    dump($params);
    // 参数检测 
    // 独立验证
    // 定义验证规则
    $rule=[
        'goods_name|商品名称'=>'require|token',
        'goods_price|商品价格'=>'require|float|egt:0',
        'goods_number|商品数量'=>'require|integer|egt:0'
    ];
    // 定义错误提示信息(可选)
    $msg=[
        'goods_price.float'=>'商品价格必须是整数或者小数'
    ];
    // 实例化验证类Validate
    // $Validate=new Validate($rule,$msg);
    // 执行验证       
    //             检测数据 
    // if(!$Validate->check($params)){
    //     $error_msg=$Validate->getError();//获取错误信息
    //     $this->error($error_msg);//给页面提示
    // }
    // 调用控制器的validate
    // $Validate就是一个字符串错误信息
    $Validate=$this->validate($params,$rule,$msg);
    if($Validate!==true){
        $this->error($Validate);
    }
    // 文件上传
    $params['goods_logo']=$this->uploads_logo();
    
    // 添加数据到数据表  第二个参数true表示过滤非数据表字段
       \app\admin\model\Goods::create($params,true);
    //    页面跳转
       $this->success('添加成功','admin/goods/index');
    }

    // @return 图片路径
    private function uploads_logo()
    {
        // 获取上传的文件
        $file=request()->file('logo');
        // 判断是否上传了文件
        // 如果为空运行error
        if(empty($file)){
            $this->error('没有上传文件');
        }
        // 移动图片到指定的目录下 /public/uploads  ROOT_PATH表示当前目录   DS表示目录分割符/
        // size	上传文件的最大字节
        // ext	文件后缀，多个用逗号分割或者数组
        $info=$file->validate(['size'=>10*1024*1024,'ext'=>'jpg,png,gif,jpeg'])->move(ROOT_PATH.'public'.DS.'uploads');
        if($info){
            // 上传成功  拼接图片的访问路径 uploads/20160820/42a79759f284b767dfcb2a0197904287.jpg
            $goods_logo=DS.'uploads'.DS.$info->getSaveName();
            // 生成缩略图  \think\Image类 保存
            // 打开图片
            $image=\think\Image::open('.'.$goods_logo);
            // 生成缩略图 保存图片    thumb后面的两个参数是按照原图的比例生成一个最大为300*250的缩略图并保存为thumb.png    后面的这个$goods_logo可以改变名字从而实现不覆盖前一张图片的效果
            $image->thumb(300,250)->save('.'.$goods_logo);
            // 返回图片路径
            return $goods_logo;
        }else{
            // 上传失败
            $error_msg=$file->getError();
            $this->error($error_msg);
        }
    }
    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
        $data=\app\admin\model\Goods::find($id);
        return view('read',['data'=>$data]);
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        $goods=\app\admin\model\Goods::find($id);
        return view('edit',['goods'=>$goods]);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        // 接收参数
        $params=input();
        // 参数检测（表单验证）略
        // 验证规则
        $rule=[
            'goods_name|商品名称'=>'require|max:100',
            'goods_price|商品价格'=>'require|float|egt:0',
            'goods_number|商品数量'=>'require|number|egt:0'
        ];
        // 错误信息（可选）
        $msg=[
            'goods_price.float'=>'商品价格必须为整数或者小数'
        ];
        // 独立验证
        // $Validate=new \think\Validate($rule,$msg);
        // if(!$Validate->check($params)){
            // 失败
        //     $error_msg=$Validate->getError();
        //     $this->error($error_msg);
        // }
        // 控制器验证
        $Validate=$this->validate($params,$rule,$msg);
        if($Validate!==true){
            // 失败 $Validate就是字符串错误信息
            $this->error($Validate);
        };
        // 文件上传
        if(empty($file)){
            unset($params['goods_logo']);
        }else{
            $params['goods_logo']=$this->uploads_logo;
            // 先查询原图片地址
            $goods=\app\admin\model\Goods::find($id);
        };
        // 处理数据（修改数据到数据表）
        \app\admin\model\Goods::update($params,['id'=>$id],true);
        // 删除原图片
        if(isset($goods)){
            // $goods->goods_logo  /uploads/2353415/sadsfsf.jpg
            unlink('.'.$goods->goods_logo);
        }
    //    返回（跳转页面）
        $this->success('修改成功','admin/goods/index');
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
    //    删除操作
        // \app\admin\model\Goods::destroy($id); 软删除
        // \app\admin\model\Goods::destroy($id,true); 真删除
        $goods=\app\admin\model\Goods::find($id);
        if(empty($goods)){
            $this->error('数据已经不存在');
        }
        $goods->delete();  //软删除
        // $goods->delete(true); 真删除
        // 跳转到列表页
        $this->success('删除成功','admin/goods/index');
        return view();
    }
   
}
